Labolatorium 2: Arytmetyka komputerowa¶
Jakub Fabia
Importowanie bibliotek¶
Importuję niezbędne biblioteki. Biblioteki te obejmują:
DataFramesdo manipulacji danymi w formie tabelarycznej,Plotsdo tworzenia wykresów,QuadGKdo dokładnych obliczeń całki (w zadaniu 4),
In [1]:
using DataFrames
using Plots
using QuadGK
Zadanie 1¶
Liczby znormalizowane w standardzie IEEE-754 są odczytywane z pamięci do poniższej postaci:
$L = (-1)^{znak} * 1.mantysa * 2^{cecha-bias}$
Funkcje¶
In [2]:
decode(x::Float16) = (b=bitstring(x); (string("Znak: ", b[1], " Cecha: ", b[2:6], " Mantysa: ", b[7:16])))
decode(x::Float32) = (b=bitstring(x); (string("Znak: ", b[1], " Cecha: ", b[2:9], " Mantysa: ", b[10:32])))
decode(x::Float64) = (b=bitstring(x); (string("Znak: ", b[1], " Cecha: ", b[2:12], " Mantysa: ", b[13:64])))
Out[2]:
decode (generic function with 3 methods)
In [3]:
function bit_represent(x)
println(string("Liczba: ", x))
println(string("Reprezentacja binarna: ", bitstring(x)))
println(decode(x))
end
Out[3]:
bit_represent (generic function with 1 method)
Przedstawienie liczby 1/3¶
In [4]:
x = Float16(1/3)
bit_represent(x)
Liczba: 0.3333 Reprezentacja binarna: 0011010101010101 Znak: 0 Cecha: 01101 Mantysa: 0101010101
In [5]:
x = Float32(1/3)
bit_represent(x)
Liczba: 0.33333334 Reprezentacja binarna: 00111110101010101010101010101011 Znak: 0 Cecha: 01111101 Mantysa: 01010101010101010101011
In [6]:
x = Float64(1/3)
bit_represent(x)
Liczba: 0.3333333333333333 Reprezentacja binarna: 0011111111010101010101010101010101010101010101010101010101010101 Znak: 0 Cecha: 01111111101 Mantysa: 0101010101010101010101010101010101010101010101010101
Rzutowanie Float16 na Float64¶
In [7]:
x = Float16(3.14159)
y = Float64(x)
bit_represent(x)
bit_represent(y)
Liczba: 3.14 Reprezentacja binarna: 0100001001001000 Znak: 0 Cecha: 10000 Mantysa: 1001001000 Liczba: 3.140625 Reprezentacja binarna: 0100000000001001001000000000000000000000000000000000000000000000 Znak: 0 Cecha: 10000000000 Mantysa: 1001001000000000000000000000000000000000000000000000
In [8]:
x = Float16(3/7)
y = Float64(x)
bit_represent(x)
bit_represent(y)
Liczba: 0.4285 Reprezentacja binarna: 0011011011011011 Znak: 0 Cecha: 01101 Mantysa: 1011011011 Liczba: 0.428466796875 Reprezentacja binarna: 0011111111011011011011000000000000000000000000000000000000000000 Znak: 0 Cecha: 01111111101 Mantysa: 1011011011000000000000000000000000000000000000000000
Zadanie 2¶
In [20]:
plot(
1.0:1.0:1000000.0,
eps,
linewidth=2,
xlabel="Liczba",
ylabel="Epsilon maszynowy",
title="Odległość między kolejnymi liczbami Float64",
yscale=:log10,
margin=3Plots.mm,
legend=false
)
Out[20]: